#for 循环 
px = (245,255,0)
x = [i/255 for i in px]
print(x) #结果 一个list  [0.9607843137254902, 1.0, 0.0]

#range 用法
alist = range(3) #相当于  range(0,3 )  结果 0,1,2

#open with 自动调用 f.close()
with open('test.txt','r') as f:
    for line in f.readlines():
        print(line.strip())

#f.readline() 每次取一行    

#os
print(os.environ.get('PATH'))
print (os.path.splitext('test.txt'))

#切片的使用
L = ['aaa1','bbbb2','cccc3','dddd4']
#取前两个 笨方法
print([ L[0], L[1] ])
#切片 slice  从0开始取到索引为2 但不包括2
print(L[0:2])  # 或省略0 L[:2]  结果是 ['aaa1', 'bbbb2']

print(L[1:2]) # 结果是：['bbbb2']
#倒数切片
print(L[-2:])  #['cccc3', 'dddd4'] 记住：倒数第一个元素是 -1

print(L[-2:-1]) #['cccc3']

L = list(range(100))
print(L)

#前10个
print(L[:10])

#后10个
print(L[-10:])

#前11-20
print(L[10:20]) #

#前10个数，每两个取一个：
print(L[:10:2])

#所有数，每5个取一个：
print(L[::5])

#甚至什么都不写，只写[:]就可以原样复制一个list：
print(L[:])


#list 迭代
l = [1,4,67,7]
for li in l:
    print(li)
# exit()    

#dict 迭代  
d = {'a': 1, 'd': 2, 'c': 3}
for v in d.values():
    print(v)

d = {'a': 1, 'd': 2, 'c': 3}
for key,v in d.items():
    print(key, v)

#enumerate Python内置的enumerate函数可以把一个list变成索引-元素对
for i,v in enumerate(['a','b','c']):
    print(i,v)   



#List Comprehensions   
# 语法 [expr for iter_var in iterable] 或 [expr for iter_var in iterable if cond_expr]
#expr 是计算表达式
#if 满足条件才进行计算
#返回结果是list
L = [i % 2 == 1 for i in range(10)]
#[True, False, True, False, True, False, True, False, True, False]

L = [i*10 for i in range(0,10) if i%2==0]
#[0, 20, 40, 60, 80]

#（） 返回 generator 对象
L = (i*10 for i in range(0,10) if i%2==0)
#<generator object <genexpr> at 0x10318d0f8>

#多层循环
L = [a * b for a in range(1, 10) for b in range(1, 10)]

#Generator（生成器）
#https://blog.csdn.net/zhanh1218/article/details/26590837
#为什么我推荐生成器呢。因为list大的时候很占内存，会受到内存限制；
# 如果我们需要用的元素少，岂不是浪费得很？
# generator的机制为：一边循环，一边计算！
##generator的创建方法：
1、把List Comprehensions中的[]换为()，上面有例子，不在贴出代码。
L = (i for i in range(10) if i % 2 != 1)
#yield  斐波那契（Fibonacci）數列

def fab(max): 
   n, a, b = 0, 0, 1 
   while n < max: 
       yield b 
       a, b = b, a + b 
       n = n + 1

for i in fab(8):
    print(i)       

#https://www.ibm.com/developerworks/cn/opensource/os-cn-python-yield/index.html

